%******************************************************************
%% svec: compute the vector svec(M),
%%
%%   x = svec(blk,M,isspx);
%%*****************************************************************
%% SDPT3: version 4.0
%% Copyright (c) 1997 by
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
%% Last Modified: 16 Sep 2004
%%*****************************************************************

  function x = svec(blk,M,isspx); 
     
   if iscell(M) 
      if (size(blk,1) ~= size(M,1))
         error('svec: number of rows in blk and M not equal');
      end
      if (nargin == 2)
         %%if (size(M,2) == 1)
         %%   isspx = zeros(size(blk,1),1); 
         %%else 
         %%   isspx = ones(size(blk,1),1); 
         %%end
         isspx = ones(size(blk,1),1); 
      else
         if (length(isspx) < size(blk,1))
            isspx = ones(size(blk,1),1); 
         end
      end
      x = cell(size(blk,1),1); 
      for p=1:size(blk,1)
         pblk = blk(p,:);  
         n = sum(pblk{2});  m = size(M,2); 
         if strcmp(pblk{1},'s')
            n2 = sum(pblk{2}.*(pblk{2}+1))/2; 
            if (isspx(p)); 
               x{p} = sparse(n2,m); 
            else 
               x{p} = zeros(n2,m); 
            end
            numblk = length(pblk{2}); 
            if (pblk{2} > 0)
               for k = 1:m
                  if (numblk > 1) & ~issparse(M{p,k});
                     x{p}(:,k) = mexsvec(pblk,sparse(M{p,k}),isspx(p)); 
                  else
                     x{p}(:,k) = mexsvec(pblk,M{p,k},isspx(p)); 
                  end
               end               
            end
	 else
            if (isspx(p)) 
               x{p} = sparse(n,m); 
            else 
               x{p} = zeros(n,m); 
            end
            for k = 1:m 
                x{p}(:,k) = M{p,k};
            end
         end
      end
   else 
      if strcmp(blk{1},'s')
         numblk = length(blk{2}); 
         if (numblk > 1) & ~issparse(M);
            x = mexsvec(blk,sparse(M),1); 
         else
            x = mexsvec(blk,sparse(M)); 
         end
      else
         x = M;
      end
   end 
%%**********************************************************   

